#ifndef LIDAR_PERPROCESS_VOXEL_FILTER_H
#define LIDAR_PERPROCESS_VOXEL_FILTER_H
#include <pcl/filters/voxel_grid.h>
#include <math.h>
#include <iomanip>
#include "../lidar_preprocess.h"
#include "type.h"
namespace perception
{
    namespace lidar_preprocess
    {
        template <typename T1, typename T2, typename T3>
        class VoxelFilter : public LidarPreprocess<T1, T2, T3>
        // class VoxelFilter
        {
        public:
            // using Ptr = pcl::PointCloud<T1>::Ptr;
            // using ConstPtr = pcl::PointCloud<T1>::ConstPtr;
            void Process(typename pcl::PointCloud<T1>::Ptr &data_in, typename pcl::PointCloud<T2>::Ptr &data_out, T3 &config);
            ~VoxelFilter() {}

        private:
        };
        #define INSTANTIATE_VoxelFilter(T1, T2, T3) template class VoxelFilter<T1, T2, T3>;
    }
}
#endif